<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="urn:IEEE-1671:2008.01:HardwareCommon" xmlns:c="urn:IEEE-1671:2008.01:Common" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:IEEE-1671:2008.01:HardwareCommon" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.04">
	<xs:annotation>
		<xs:documentation xml:lang="en">
      This schema is specified in IEEE 1671-2006, "IEEE Trial-Use Standard
      for Automatic Test Markup Language (ATML) for Exchanging Automatic Test
      Equipment and Test Information via XML."
      This schema is a World Wide Web Consortium (W3C) Extensible
      Markup Language (XML) binding of the ATML Hardware Common component defined in IEEE
      1671-2006, "IEEE Trial-Use Standard for Automatic Test Markup
      Language (ATML) for Exchanging Automatic Test Equipment and Test
      Information via XML."
      The purpose of this schema is to provide hardware unique types and attributes
      for ATML schemas. This schema uses the W3C XML Schema definition
      language as the encoding. This allows for interoperability and
      the exchange of ATML component instances between various systems.
      This schema shall not be modified but may be included in
      derivative works.

      Copyright (c) 2006 Institute of Electrical and Electronics
      Engineers, Inc.

      USE AT YOUR OWN RISK

	</xs:documentation>
	</xs:annotation>
	<xs:import namespace="urn:IEEE-1671:2008.01:Common" schemaLocation="Common.xsd"/>
	<xs:attributeGroup name="RepeatedItemAttributes">
		<xs:attribute name="baseIndex" type="xs:int" use="optional">
			<xs:annotation>
				<xs:documentation>Starting index for the items.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="count" type="xs:int" use="optional">
			<xs:annotation>
				<xs:documentation>Number fo identical items</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="incrementBy" type="xs:int" use="optional" default="1">
			<xs:annotation>
				<xs:documentation>Specifies the value to increment by when calculating the value with which the replacement character is replaced.  Allows for defining items where paired items have different characteristics.  Defaults to 1.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="replacementCharacter" type="c:NonBlankString" use="optional" default="#">
			<xs:annotation>
				<xs:documentation>Character replaced with calculated index when repeated items are expanded. </xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:attributeGroup>
	<xs:simpleType name="ErrorType">
		<xs:annotation>
			<xs:documentation>Identifies the type of error.</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string"/>
	</xs:simpleType>
	<xs:complexType name="HardwareItemDescription" abstract="true">
		<xs:annotation>
			<xs:documentation>Abstract type used to describe hardware entities.  Derived types include Instrument Description, UUT Description, Test Station Description, etc.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="c:ItemDescription">
				<xs:sequence>
					<xs:element name="Interface" type="c:PhysicalInterface"/>
					<xs:element name="Components" minOccurs="0">
						<xs:annotation>
							<xs:documentation>This collector permits listing any subcomponents of the subject Hardware Item.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Component" maxOccurs="unbounded">
									<xs:annotation>
										<xs:documentation>Unbounded set of elements describing and identifying each subcomponent. At a minimum, there must be a description and a Part Number. </xs:documentation>
									</xs:annotation>
									<xs:complexType>
										<xs:complexContent>
											<xs:extension base="c:ItemDescriptionReference">
												<xs:attribute name="ID" type="c:NonBlankString" use="required">
													<xs:annotation>
														<xs:documentation>ID for the component</xs:documentation>
													</xs:annotation>
												</xs:attribute>
											</xs:extension>
										</xs:complexContent>
									</xs:complexType>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="ParentComponents" minOccurs="0">
						<xs:annotation>
							<xs:documentation>This collector permits listing the parents of the Hardware Item.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Component" maxOccurs="unbounded">
									<xs:annotation>
										<xs:documentation>Unbounded set of elements describing the Hardware Items into which this Hardware Item can be used as a component.</xs:documentation>
									</xs:annotation>
									<xs:complexType>
										<xs:complexContent>
											<xs:extension base="c:ItemDescriptionReference">
												<xs:attribute name="ID" type="c:NonBlankString" use="required">
													<xs:annotation>
														<xs:documentation>ID for the component</xs:documentation>
													</xs:annotation>
												</xs:attribute>
											</xs:extension>
										</xs:complexContent>
									</xs:complexType>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="Control" minOccurs="0">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Firmwares" minOccurs="0">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="Firmware" type="VersionIdentifier"/>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
								<xs:element name="Drivers" minOccurs="0">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="Driver" maxOccurs="unbounded">
												<xs:complexType>
													<xs:complexContent>
														<xs:extension base="VersionIdentifier">
															<xs:sequence>
																<xs:element name="Type" type="Driver">
																	<xs:annotation>
																		<xs:documentation>The driver type is specified by providing a type that derives from the "Driver" abstract type.  The derived type includes any information that is specific to that driver type.  The schema includes derived types for several different driver types. </xs:documentation>
																	</xs:annotation>
																</xs:element>
																<xs:element name="Manufacturer" type="c:ManufacturerData" minOccurs="0"/>
																<xs:element name="Dependencies" minOccurs="0">
																	<xs:annotation>
																		<xs:documentation>Identifies any dependencies.</xs:documentation>
																	</xs:annotation>
																	<xs:complexType>
																		<xs:sequence>
																			<xs:element name="Firmware" type="VersionIdentifier" minOccurs="0" maxOccurs="unbounded"/>
																			<xs:element name="Software" type="VersionIdentifier" minOccurs="0" maxOccurs="unbounded"/>
																		</xs:sequence>
																	</xs:complexType>
																</xs:element>
																<xs:element name="Platform">
																	<xs:annotation>
																		<xs:documentation>Identifies the platform requirements for using this driver.</xs:documentation>
																	</xs:annotation>
																	<xs:complexType>
																		<xs:sequence>
																			<xs:element name="OperatingSystem" maxOccurs="unbounded">
																				<xs:complexType>
																					<xs:complexContent>
																						<xs:extension base="VersionIdentifier">
																							<xs:attribute name="servicePack" type="c:NonBlankString"/>
																						</xs:extension>
																					</xs:complexContent>
																				</xs:complexType>
																			</xs:element>
																			<xs:element name="Processor" minOccurs="0">
																				<xs:complexType>
																					<xs:attribute name="speed" type="c:NonBlankString"/>
																				</xs:complexType>
																			</xs:element>
																			<xs:element name="PhysicalMemory" minOccurs="0">
																				<xs:complexType>
																					<xs:attribute name="minimum" type="c:NonBlankString"/>
																				</xs:complexType>
																			</xs:element>
																			<xs:element name="HardDisk" minOccurs="0">
																				<xs:complexType>
																					<xs:attribute name="minimum" type="c:NonBlankString"/>
																				</xs:complexType>
																			</xs:element>
																		</xs:sequence>
																	</xs:complexType>
																</xs:element>
																<xs:element name="Extension" type="c:Extension" minOccurs="0"/>
															</xs:sequence>
														</xs:extension>
													</xs:complexContent>
												</xs:complexType>
											</xs:element>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
								<xs:element name="ControlLanguages" minOccurs="0">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="ControlLanguage" type="ControlLanguage" maxOccurs="unbounded">
												<xs:annotation>
													<xs:documentation>The control language is specified by providing a type that derives from the "ControlLanguage" abstract type.</xs:documentation>
												</xs:annotation>
											</xs:element>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
								<xs:element name="Tools" minOccurs="0">
									<xs:annotation>
										<xs:documentation>Any software tool that comes with the item, e.g., Calibration Utility, Soft Front Panel, etc.</xs:documentation>
									</xs:annotation>
									<xs:complexType>
										<xs:sequence>
											<xs:element name="Tool" maxOccurs="unbounded">
												<xs:complexType>
													<xs:complexContent>
														<xs:extension base="VersionIdentifier">
															<xs:sequence>
																<xs:element name="Dependencies" minOccurs="0">
																	<xs:annotation>
																		<xs:documentation>Identifies any dependencies.</xs:documentation>
																	</xs:annotation>
																	<xs:complexType>
																		<xs:choice maxOccurs="unbounded">
																			<xs:element name="Driver">
																				<xs:complexType>
																					<xs:complexContent>
																						<xs:extension base="VersionIdentifier"/>
																					</xs:complexContent>
																				</xs:complexType>
																			</xs:element>
																			<xs:element name="Software">
																				<xs:complexType>
																					<xs:complexContent>
																						<xs:extension base="VersionIdentifier"/>
																					</xs:complexContent>
																				</xs:complexType>
																			</xs:element>
																		</xs:choice>
																	</xs:complexType>
																</xs:element>
															</xs:sequence>
															<xs:attribute name="filePath" type="c:NonBlankString"/>
														</xs:extension>
													</xs:complexContent>
												</xs:complexType>
											</xs:element>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
								<xs:element name="Extension" type="c:Extension" minOccurs="0"/>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="Documentation" minOccurs="0">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Document" type="c:Document" maxOccurs="unbounded"/>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="ConfigurationOptions" minOccurs="0">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Option" maxOccurs="unbounded">
									<xs:annotation>
										<xs:documentation>Name of the configuration option. Configuration options are values the user can modify that persist after a power-cycle.</xs:documentation>
									</xs:annotation>
									<xs:complexType>
										<xs:attribute name="name" type="c:NonBlankString" use="required"/>
									</xs:complexType>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="FactoryDefaults" minOccurs="0">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Default" type="c:NamedValue" maxOccurs="unbounded">
									<xs:annotation>
										<xs:documentation>Keyword-value pair for identifying manufacturer item defaults.</xs:documentation>
									</xs:annotation>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="CalibrationRequirements" minOccurs="0">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="CalibrationRequirement" maxOccurs="unbounded">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="SupportEquipment" type="c:NonBlankString" minOccurs="0" maxOccurs="unbounded">
												<xs:annotation>
													<xs:documentation>Identifies the support equipment needed for running calibration.</xs:documentation>
												</xs:annotation>
											</xs:element>
											<xs:element name="Procedure" type="c:Document" maxOccurs="unbounded">
												<xs:annotation>
													<xs:documentation>The calibration procedure.</xs:documentation>
												</xs:annotation>
											</xs:element>
										</xs:sequence>
										<xs:attribute name="frequency" type="xs:duration" use="required">
											<xs:annotation>
												<xs:documentation>Specifies how often calibration needs to be executed.  The following indications a duration of 2 months, 10 days and 15 hours: P2M10DT15H </xs:documentation>
											</xs:annotation>
										</xs:attribute>
									</xs:complexType>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="OperationalRequirements" type="OperationalRequirements" minOccurs="0"/>
					<xs:element name="EnvironmentalRequirements" type="c:EnvironmentalRequirements" minOccurs="0"/>
					<xs:element name="PowerRequirements" type="PowerSpecifications" minOccurs="0"/>
					<xs:element name="PhysicalCharacteristics" type="PhysicalCharacteristics" minOccurs="0"/>
					<xs:element name="Errors" minOccurs="0">
						<xs:annotation>
							<xs:documentation>List of errors associated with the item.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Error" maxOccurs="unbounded">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="Description" type="c:NonBlankString"/>
										</xs:sequence>
										<xs:attribute name="type" type="ErrorType">
											<xs:annotation>
												<xs:documentation>Warning, error fatal</xs:documentation>
											</xs:annotation>
										</xs:attribute>
										<xs:attribute name="source" type="c:NonBlankString">
											<xs:annotation>
												<xs:documentation>item, driver</xs:documentation>
											</xs:annotation>
										</xs:attribute>
										<xs:attribute name="ID" type="c:NonBlankString" use="required"/>
									</xs:complexType>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="NetworkList" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Netlist describing how all the ports in the item are wired together.  In the simplest scenario, the capability ports get wired to Resource ports and the resource ports get wired to the item ports.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Network" type="Network" maxOccurs="unbounded"/>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="LegalDocuments" minOccurs="0">
						<xs:complexType>
							<xs:choice maxOccurs="unbounded">
								<xs:element name="Warranty" type="c:Document"/>
								<xs:element name="License" type="c:Document"/>
								<xs:element name="Exportability" type="c:Document"/>
								<xs:element name="Conformance" type="c:Document"/>
								<xs:element name="Safety" type="c:Document"/>
							</xs:choice>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--Control language abstract types and derived types-->
	<xs:complexType name="ControlLanguage" abstract="true">
		<xs:annotation>
			<xs:documentation>Abstract type for control language identification  Derived types include SCPI and Register</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Documentation" type="c:Document" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="SCPI">
		<xs:annotation>
			<xs:documentation>Specifies that the item can be controlled using SCPI commands</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ControlLanguage"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Register">
		<xs:annotation>
			<xs:documentation>Specifies that the item is register based</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ControlLanguage"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Generic">
		<xs:annotation>
			<xs:documentation>Specifies that the item can be controlled using some generic control language</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ControlLanguage"/>
		</xs:complexContent>
	</xs:complexType>
	<!--Driver abstract type and derived types-->
	<xs:complexType name="Driver" abstract="true">
		<xs:annotation>
			<xs:documentation>Abstract type for drivers.  Derived types include VPP, IVI, IVI-C, IVI-COM, etc.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="fileName" type="c:NonBlankString" use="required"/>
		<xs:attribute name="filePath" type="c:NonBlankString"/>
	</xs:complexType>
	<xs:complexType name="VPP">
		<xs:annotation>
			<xs:documentation>VXI plug and play driver</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Driver">
				<xs:attribute name="prefix" type="c:NonBlankString" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="IVI" abstract="true">
		<xs:annotation>
			<xs:documentation>IVI driver - includes structure for specifying whether the driver is an IVI-C or IVI-COM driver</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Driver">
				<xs:sequence>
					<xs:element name="Class" type="c:NonBlankString" minOccurs="0" maxOccurs="unbounded">
						<xs:annotation>
							<xs:documentation>Name of IVI class(es) provided by this driver</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="ComplianceDocument" type="c:Document" minOccurs="0"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="IVI-C">
		<xs:annotation>
			<xs:documentation>IVI-C driver</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="IVI">
				<xs:attribute name="prefix" type="c:NonBlankString" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="IVI-COM">
		<xs:annotation>
			<xs:documentation>IVI-COM driver</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="IVI">
				<xs:attribute name="progID" type="c:NonBlankString" use="required">
					<xs:annotation>
						<xs:documentation>ProgID used to instantiate the driver class.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--Types for identifying hardware item sub-components: resources, switches, triggers-->
	<xs:complexType name="Item">
		<xs:annotation>
			<xs:documentation>Base type for sub-components of a hardware item</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Description" type="c:NonBlankString" minOccurs="0"/>
			<xs:element name="Extension" type="c:Extension" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="name" type="c:NonBlankString" use="required"/>
	</xs:complexType>
	<xs:complexType name="RepeatedItem">
		<xs:annotation>
			<xs:documentation>Allows multiple identical items to be described with a single element in an instance document.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Item">
				<xs:attributeGroup ref="RepeatedItemAttributes"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Resource">
		<xs:complexContent>
			<xs:extension base="RepeatedItem">
				<xs:sequence>
					<xs:element name="Interface" type="c:Interface"/>
					<xs:element name="Triggers" type="Triggers" minOccurs="0"/>
				</xs:sequence>
				<xs:attribute name="index" type="xs:int">
					<xs:annotation>
						<xs:documentation>Index used to identify the resource.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Resources">
		<xs:sequence>
			<xs:element name="Resource" type="Resource" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="Triggers">
		<xs:sequence>
			<xs:element name="Trigger" type="Trigger" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!--Types for describing switching-->
	<xs:complexType name="Switching">
		<xs:sequence>
			<xs:choice maxOccurs="unbounded">
				<xs:element name="Switch" type="Switch"/>
				<xs:element name="CrossPointSwitch" type="CrossPointSwitch"/>
				<xs:element name="MatrixSwitch" type="MatrixSwitch"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="Switch">
		<xs:complexContent>
			<xs:extension base="RepeatedItem">
				<xs:sequence>
					<xs:element name="Interface" type="c:Interface"/>
					<xs:element name="Connections">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="RelaySetting" maxOccurs="unbounded">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="RelayConnection" minOccurs="0" maxOccurs="unbounded">
												<xs:complexType>
													<xs:attribute name="from" type="c:NonBlankString" use="required"/>
													<xs:attribute name="to" type="c:NonBlankString" use="required"/>
												</xs:complexType>
											</xs:element>
										</xs:sequence>
										<xs:attribute name="name" type="xs:string" use="required"/>
									</xs:complexType>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="CrossPointSwitch">
		<xs:complexContent>
			<xs:extension base="Item">
				<xs:sequence>
					<xs:element name="Columns">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Port" type="SwitchPort" maxOccurs="unbounded"/>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="Rows">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Port" type="SwitchPort" maxOccurs="unbounded"/>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
				<xs:attribute name="lineCount" type="xs:int" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="SwitchPort">
		<xs:complexContent>
			<xs:extension base="RepeatedItem">
				<xs:sequence>
					<xs:element name="Pin" maxOccurs="unbounded">
						<xs:complexType>
							<xs:attribute name="name" type="c:NonBlankString" use="required"/>
							<xs:attribute name="line" type="xs:int" use="required"/>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="MatrixSwitch">
		<xs:complexContent>
			<xs:extension base="Item">
				<xs:sequence>
					<xs:element name="Columns">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Pin" type="MatrixPort" maxOccurs="unbounded"/>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="Rows">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Pin" type="MatrixPort" maxOccurs="unbounded"/>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="MatrixPort">
		<xs:complexContent>
			<xs:extension base="RepeatedItem"/>
		</xs:complexContent>
	</xs:complexType>
	<!--Types used to describe component connectivity-->
	<xs:complexType name="Network">
		<xs:annotation>
			<xs:documentation>Describes how the various item entities are connected.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Node" type="NetworkNode" maxOccurs="unbounded"/>
			<xs:element name="Description" type="c:NonBlankString" minOccurs="0"/>
			<xs:element name="Extension" type="c:Extension" minOccurs="0"/>
		</xs:sequence>
		<xs:attributeGroup ref="RepeatedItemAttributes"/>
	</xs:complexType>
	<xs:complexType name="NetworkNode">
		<xs:sequence>
			<xs:element name="Path">
				<xs:annotation>
					<xs:documentation>XPath path identifying the node.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:simpleContent>
						<xs:extension base="c:NonBlankString">
							<xs:attribute name="documentId" type="c:Uuid">
								<xs:annotation>
									<xs:documentation>ID of the document in which the node is defined.  If not speciifed, the node is defined in the same document.</xs:documentation>
								</xs:annotation>
							</xs:attribute>
						</xs:extension>
					</xs:simpleContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="Description" type="c:NonBlankString" minOccurs="0"/>
			<xs:element name="Extension" type="c:Extension" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<!--Remaining types-->
	<xs:complexType name="FacilitiesRequirements">
		<xs:sequence>
			<xs:element name="FacilitiesInterface" type="c:Interface" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Non-power interfaces.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="FacilityRequirementsDocuments" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="FacilitiesRequirementsDocument" type="c:Document" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="Hydraulic" type="xs:string" minOccurs="0"/>
			<xs:element name="Pneumatic" type="xs:string" minOccurs="0"/>
			<xs:element name="Cooling" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Test Station cooling requirements.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Extension" type="c:Extension" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="OperationalRequirements">
		<xs:sequence>
			<xs:element name="OperationalRequirement" type="c:NamedValue" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="warmUpTime" type="xs:duration" use="required"/>
	</xs:complexType>
	<xs:complexType name="PhysicalCharacteristics">
		<xs:all>
			<xs:element name="Mass" type="c:double" minOccurs="0"/>
			<xs:element name="Volume" type="c:double" minOccurs="0"/>
			<xs:element name="LinearMeasurements" minOccurs="0">
				<xs:complexType>
					<xs:all>
						<xs:element name="Height" type="c:double" minOccurs="0"/>
						<xs:element name="Width" type="c:double" minOccurs="0"/>
						<xs:element name="Depth" type="c:double" minOccurs="0"/>
						<xs:element name="RackUSize" minOccurs="0">
							<xs:complexType>
								<xs:attribute name="value" type="xs:double" use="required"/>
							</xs:complexType>
						</xs:element>
					</xs:all>
				</xs:complexType>
			</xs:element>
			<xs:element name="Other" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Value" type="c:NamedValue" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:all>
	</xs:complexType>
	<xs:complexType name="PowerSpecifications">
		<xs:choice maxOccurs="unbounded">
			<xs:element name="AC">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Frequency" type="c:Limit"/>
						<xs:element name="Voltage" type="c:Limit"/>
						<xs:choice minOccurs="0">
							<xs:element name="Amperage" type="c:Limit"/>
							<xs:element name="PowerDraw" type="c:Limit"/>
						</xs:choice>
						<xs:element name="Connector" type="c:ConnectorLocation" minOccurs="0"/>
						<xs:element name="Description" type="c:NonBlankString" minOccurs="0"/>
					</xs:sequence>
					<xs:attribute name="phase" type="xs:double" use="optional"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="DC">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Voltage" type="c:Limit"/>
						<xs:choice minOccurs="0">
							<xs:element name="Amperage" type="c:Limit"/>
							<xs:element name="PowerDraw" type="c:Limit"/>
						</xs:choice>
						<xs:element name="Connector" type="c:ConnectorLocation" minOccurs="0"/>
						<xs:element name="Description" type="c:NonBlankString" minOccurs="0"/>
					</xs:sequence>
					<xs:attribute name="polarity" type="xs:double" use="optional"/>
					<xs:attribute name="ripple" type="xs:double" use="optional"/>
				</xs:complexType>
			</xs:element>
		</xs:choice>
	</xs:complexType>
	<xs:complexType name="VersionIdentifier">
		<xs:annotation>
			<xs:documentation>Used to identify the minimum/maximum version</xs:documentation>
		</xs:annotation>
		<xs:attribute name="name" type="c:NonBlankString" use="optional"/>
		<xs:attribute name="version" type="c:NonBlankString" use="required"/>
		<xs:attribute name="qualifier" use="required">
			<xs:annotation>
				<xs:documentation>Used to indicate whether the version speciifed is the minum or maximum version supported.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:NMTOKENS">
					<xs:enumeration value="Min"/>
					<xs:enumeration value="Max"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<!--Trigger Support-->
	<xs:complexType name="Trigger">
		<xs:annotation>
			<xs:documentation>Details needed to interface with this trigger signal</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Description" type="c:NonBlankString" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Free text to give details of this trigger signal</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="TriggerProperties">
				<xs:annotation>
					<xs:documentation>Details of the signal that will generate the trigger</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="TriggerPropertyGroup" type="TriggerPropertyGroup" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="TriggerPorts">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="TriggerPort" type="TriggerPort" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="name" type="c:NonBlankString" use="required">
			<xs:annotation>
				<xs:documentation>Name should be descriptive of what this signal does</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="TriggerPropertyGroup" abstract="true">
		<xs:annotation>
			<xs:documentation>Base type for trigger properties</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Description" type="c:NonBlankString" minOccurs="0"/>
			<xs:element name="Extension" type="c:Extension" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="name" type="c:NonBlankString" use="required"/>
	</xs:complexType>
	<xs:complexType name="AnalogTriggerPropertyGroup">
		<xs:annotation>
			<xs:documentation>Properties if trigger comes from an analog signal</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="TriggerPropertyGroup">
				<xs:sequence>
					<xs:element name="Level" type="LevelType"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DigitalTriggerPropertyGroup">
		<xs:annotation>
			<xs:documentation>Properties if trigger comes from a digital signal</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="TriggerPropertyGroup">
				<xs:sequence>
					<xs:element name="Detection" type="DetectionType"/>
					<xs:element name="MinPulseWidth" type="MinPulseWidthType"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="SoftwareTriggerPropertyGroup">
		<xs:annotation>
			<xs:documentation>Properties if the trigger is intiated by a SW call</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="TriggerPropertyGroup"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="LANTriggerPropertyGroup">
		<xs:annotation>
			<xs:documentation>Properties if the trigger is a LAN trigger</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="TriggerPropertyGroup"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="LevelType">
		<xs:annotation>
			<xs:documentation>Describes the analog voltage needed for the trigger</xs:documentation>
		</xs:annotation>
		<xs:attribute name="value" type="xs:double" use="required"/>
		<xs:attribute name="units" type="LevelUnits" use="required"/>
		<xs:attribute name="numberOfBits" type="xs:int" use="required"/>
	</xs:complexType>
	<xs:complexType name="DetectionType">
		<xs:annotation>
			<xs:documentation>Need to have edgeDetection or levelDetection or both</xs:documentation>
		</xs:annotation>
		<xs:attribute name="edgeDetection" type="DigitalEdge" use="optional"/>
		<xs:attribute name="levelDetection" type="DigitalLevel" use="optional"/>
	</xs:complexType>
	<xs:complexType name="MinPulseWidthType">
		<xs:attribute name="value" type="xs:double" use="required"/>
		<xs:attribute name="units" type="PulseUnits" use="required"/>
	</xs:complexType>
	<xs:complexType name="TriggerPort">
		<xs:annotation>
			<xs:documentation>Direction and type are important to know what interfaces this trigger can be routed to/from.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Description" type="c:NonBlankString" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="name" type="c:NonBlankString" use="required"/>
		<xs:attribute name="direction" type="c:PortDirection" use="required"/>
		<xs:attribute name="type" type="TriggerPortType" use="required">
			<xs:annotation>
				<xs:documentation>Created TriggerPortType to allow capturing of LAN and SW trigger types.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:simpleType name="TriggerPortType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Digital"/>
			<xs:enumeration value="Analog"/>
			<xs:enumeration value="Software"/>
			<xs:enumeration value="LAN"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="LevelUnits">
		<xs:restriction base="xs:string">
			<xs:enumeration value="%FullScale"/>
			<xs:enumeration value="+/-V"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="DigitalEdge">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Rising"/>
			<xs:enumeration value="Falling"/>
			<xs:enumeration value="Selectable"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="DigitalLevel">
		<xs:restriction base="xs:string">
			<xs:enumeration value="High"/>
			<xs:enumeration value="Low"/>
			<xs:enumeration value="Selectable"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="PulseUnits">
		<xs:restriction base="xs:string">
			<xs:enumeration value="S"/>
			<xs:enumeration value="mS"/>
			<xs:enumeration value="uS"/>
			<xs:enumeration value="nS"/>
			<xs:enumeration value="pS"/>
			<xs:enumeration value="fS"/>
		</xs:restriction>
	</xs:simpleType>
	<!--Capabilities Support-->
	<xs:complexType name="Capabilities">
		<xs:annotation>
			<xs:documentation>Collector element used to group list of capabilities and the mapping of capabilities to ports.  The capabilities can be defined inline or referenced from an external document.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:choice maxOccurs="unbounded">
				<xs:element name="CapabilitiesReference" type="c:DocumentReference"/>
				<xs:element name="Capability" type="Capability"/>
			</xs:choice>
			<xs:element name="CapabilityMap" type="CapabilityMap"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="Capability">
		<xs:annotation>
			<xs:documentation>Base type used to describe capabilities</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Item">
				<xs:sequence>
					<xs:element name="Interface" type="c:Interface"/>
					<xs:element name="SignalDescription" type="c:Extension" minOccurs="0"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="CapabilityMap">
		<xs:annotation>
			<xs:documentation>Describes how capabilities are mapped to resource ports</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Mapping" type="Mapping" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="Mapping">
		<xs:sequence>
			<xs:element name="Map" type="Network" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attributeGroup ref="RepeatedItemAttributes"/>
	</xs:complexType>
	<!--Types used to capture specifications-->
	<xs:complexType name="Specifications">
		<xs:sequence>
			<xs:element name="Conditions" type="SpecificationConditions" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Conditions under which the specifications are measured.  These conditions apply to all specifications.  Each individual specification can add additional conditions, or override/replace the any of these conditions.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Certifications" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Specifies traceability information for all specs</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Certification" type="c:NonBlankString" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:choice maxOccurs="unbounded">
				<xs:element name="Specification" type="Specification"/>
				<xs:element name="Group" type="SpecificationGroup">
					<xs:annotation>
						<xs:documentation>A grouping of specifications that share a set of conditions.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="Specification" abstract="true">
		<xs:sequence>
			<xs:element name="Description" type="c:NonBlankString">
				<xs:annotation>
					<xs:documentation>A short (one or two sentence) textual description of the specification</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Definition" minOccurs="0">
				<xs:complexType>
					<xs:choice>
						<xs:element name="Text" type="c:NonBlankString">
							<xs:annotation>
								<xs:documentation>A rigorous (mathematical) description of how the specification is defined and measured</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="Document" type="c:Document"/>
					</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:element name="Conditions" type="SpecificationConditions" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Conditions under which this specification is measured. </xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Limits" minOccurs="0">
				<xs:annotation>
					<xs:documentation>The limits for the specification</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Limit" type="c:Limit" maxOccurs="unbounded">
							<xs:annotation>
								<xs:documentation>Specification limit</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="Graph" minOccurs="0">
				<xs:annotation>
					<xs:documentation>The data for the graph can be specified by providing the URL of the file containg the data or image of the graph, or by specifying the data using an extension.  For example, using the XML standard for describing graphis or perhaps the XML representation of a PDF file.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:choice>
						<xs:element name="URL" type="c:NonBlankURI"/>
						<xs:element name="Extension" type="c:Extension"/>
					</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:element name="SupplementalInformation" type="c:NonBlankString" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Any additional information that is necessary to clarify the specification.  This includes information that is contained in footnotes of the datasheet</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="RequiredOptions" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Options that are required for this spec to be valid</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Option" type="c:NonBlankString" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="ExclusiveOptions" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Otions that make this spec invalid</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Option" type="c:NonBlankString" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="name" type="c:NonBlankString" use="required"/>
	</xs:complexType>
	<xs:complexType name="SpecificationGroup">
		<xs:sequence>
			<xs:element name="Description" type="c:NonBlankString" minOccurs="0">
				<xs:annotation>
					<xs:documentation>A short (one or two sentence) textual description of the specification group</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Conditions" type="SpecificationConditions" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Conditions under which the grouped specifications are measured.  Each individual specification can add additional conditions, or override/replace any of these conditions.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:choice maxOccurs="unbounded">
				<xs:element name="Specification" type="Specification"/>
				<xs:element name="Group" type="SpecificationGroup"/>
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="name" type="c:NonBlankString"/>
	</xs:complexType>
	<xs:complexType name="SpecificationConditions">
		<xs:sequence>
			<xs:element name="Condition" type="c:NonBlankString" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="Guaranteed">
		<xs:annotation>
			<xs:documentation>Guaranteed: If the item does not meet this spec, it is considered broken and will be repaired under warranty</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Specification"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Typical">
		<xs:annotation>
			<xs:documentation>Typical: Most items would be expected to meet this spec, but it is not guaranteed</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Specification">
				<xs:attribute name="expectedSuccessRange" type="xs:double">
					<xs:annotation>
						<xs:documentation>States the expected percentage of instruments that will meet the spec</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Nominal">
		<xs:annotation>
			<xs:documentation>Nominal: Characteristics that are true by design, but not measured or tested.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Specification"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Characteristic">
		<xs:annotation>
			<xs:documentation>Characteristic: A ball-park figure that describes the type of performance that may be expected, but not verified with rigorous statistical analysis or measurements</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Specification"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Feature">
		<xs:annotation>
			<xs:documentation>Feature: A description of a feature, which is not actually a spec but is the sort of thing that is often included in the spec sheet</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Specification"/>
		</xs:complexContent>
	</xs:complexType>
</xs:schema>
